通用命令
- keys:查看所有的key 复杂度o(n)
- dbsize:计算key的总数,复杂度O(1)
- exists:检查key是否存在,复杂度O(1)
- del:删除指定key-value, 复杂度O(1)
- expire key seconds:key 在second秒后过期, 复杂度O(1)
- ttl key:查看key多久过期 ,复杂度O(1)
- persist key:去掉key的过期时间, 复杂度O(1)
- type key:返回key的类型, 复杂度O(1)
数据结构和内部编码
单线程架构
单线程为什么这么快
* 纯内存
* 非阻塞IO
* 避免线程切换和竞态消耗
单线程注意什么
* 一次只运行一条命令
* 拒绝长(慢)命令
* 其实不是单线程
fysnc file descrptor
close file descriptor
5中数据结构
1.字符串
key value
hello world
counter 1
bits 1010101022
最大512M
场景
- 缓存
- 计数器
- 分布式锁
常见命令
字符串类型
get
set key value #不管key是否存在,都设置
setnx key value #key不存,才设置
set key value xx#key存在,才设置
del
incr o(1)
decr o(1)
incrby o(1)
decrby o(1)
mget key1 key2 key3...
mset key1 value1 key2 value2 key3 value3...
getset key newvalue #s设置key的值为newvalue并返回旧的value
append key value#将value追加到旧的value
strlen key #返回字符串的长度(注意中文)
incrbyfloat key 3.3
getrange key start end
setrange key index value
哈希类型
key field value
hget key file
hset key field value
hgetall key#返回key的所有field
hdel key field #删除key的field
hexists key field #判断hash key是否有field
hlen key#获取hash key field的数量
hmget key field1 field2...fieldn
hmset key field1 value1 field2 value2...fieldn valuen
实战:
记录网站每个用户个人主页的访问量?
hincrby user:1:info pageview count
缓存视频的基本信息(数据源在mysql中)伪代码
hvals key # 返回hash key对应所有的field的value
hkeys key #返回hash key对应所有field
小心使用hgetall(单线程)
hsetnx key field value#设置hash key对应field的value
hincrby key field intCounter
hincrbyfloat key field floatCounter
list队列数据类型
key elements
特点:有序,可以重复
rpush key value1 value2...valueN
lpush key value1 value2...valueN
linsert key before|after value newValue
lpop key
rpop key
lrem key count value
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。